package com.itehima.File;

import java.io.File;
import java.security.Key;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Prac06 {
    public static void main(String[] args) {

        //统计一个文件夹中各种文件的数量

        //先得到当前要查找文件夹的路径
        File file = new File("E:\\cdj");
        HashMap<String, Integer> hm = getCount(file);
        System.out.println(hm);
        //定义一个方法去实现这个功能
    }
    public static HashMap<String,Integer> getCount(File file)
    {
        //定义一个集合，存储键值对对象，文件后缀名以及文件的数量
        HashMap<String,Integer> map=new HashMap<>();

        //遍历当前的file
        File[] files = file.listFiles();
        for (File file1 : files)
        {
            //去查看当前遍历到的是文件夹还是文件
            if(file1.isFile())//是不是文件
            {
                //获取文件名字并进行切割
                String name = file1.getName();
                String[] arr = name.split("\\.");//获取被切割的数组
                //判断当前文件是否有后缀
                if(arr.length>=2)//是有后缀的文件
                {//获取文件的后缀
                    String endname = arr[arr.length - 1];

                    //判断当前大集合中是否有这一类文件
                    if(map.containsKey(endname))
                    {
                        //如果有就增加数量
                        Integer count = map.get(endname);
                        count++;
                        map.put(endname,count);
                    }
                    else//如果没有这一类文件就添加新文件
                    {
                        map.put(endname,1);
                    }
                }
            }else//不是文件，那就是文件夹
            {
                //如果是文件夹我们就递归
                //对于子文件夹中的内容我们要放到大集合中

                HashMap<String, Integer> sonmap = getCount(file1);
                Set<Map.Entry<String, Integer>> entries = sonmap.entrySet();//获取键值对对象

                for (Map.Entry<String, Integer> entry : entries) {
                    String name = entry.getKey();
                    Integer value = entry.getValue();
                    //判断当前文件大集合中是否有了
                    if(map.containsKey(name))
                    {
                        int count=map.get(name);
                        count=count+value;
                        map.put(name,count);
                    }else
                    {
                        map.put(name,value);
                    }
                }

            }
        }
        return map;
    }

}
